注意:所有文章除特别说明外,转载请注明出处.
视图 view
定义与概念
通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
特性
视图是对于若干张基本表的引用,是一张虚表,查询语句执行的结果,不存储具体的数据,可以进行有限制的增删改查。
作用
方便操作,最主要的是查询操作,减少复杂的sql语句,增强可读性。
优势
1.分割数据,通过select与where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作。
2.给数据提供一定的逻辑独立性,如果我们为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据。
3.视图能像基本表一样授予或撤消访问许可权,给用户是表的一部分访问权限而不是全部。
4.视图可以间接对表进行更新,因此视图的更新就是表的更新。
规则和限制
1.唯一命名,不能与表或者其它视图重名。
2.视图可以嵌套,可以从其它视图中构造视图。
3.order by可以用在视图定义中,但是如果select语句从视图中检索数据的时候,在视图中的order by语句将会被覆盖。
视图/基本表区别
1.视图是已经编译好的sql语句,表不是。
2.视图没有实际的物理记录。表有。
3.表是内容,视图是窗口。
4.表只用物理空间,而视图不占用物理空间。视图只是逻辑概念的存在,表可以随时进行修改,但是视图只能由创建的语句来修改。
5.视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
6.视图的建立和删除只影响视图本身,不影响对应的基本表。
Java 数据库的操作
1.如何通过JDBC访问数据库
步骤:
1.加载JDBC驱动器
2.加载JDBC驱动(Class.forName(driver)) //driver="com.mysql.jdbc.Driver"
3.建立数据库连接,取得Connection对象
4.建立Statement对象或是PreparedStatement对象
5.执行sql语句
6.访问结果集ResultSet对象
7.依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用资源
2.JDBC处理事务采用的方法
一个事务是由一条或多条对数据库操作的SQL语句组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。在JDBC中一般通过commit()方法或rollback()方法来结束事务的操作。
扩展:JDBC有哪些事务隔离级别
3.Class.forName()方法的作用
此方法的作用就是将类加载到JVM中,它会返回一个与带有给定字符串名的类或接口相关联的class对象,并且jvm会执行该类的静态代码段
4.Statement、PreparedStatement、CallableStatement之间的区别
1.Statement用于执行不带参数的简单SQL语句,并返回它所生成结果的对象,每次执行SQL语句时,数据库都要编译该SQL语句
2.PreparedStatement表示预编译SQL语句的对象,用于执行带参数的预编译SQL语句
3.CallableStatement提供用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数
5.getString()方法与getObject()方法的区别
1.getObject()方法可以解决当查询结果集中的数据量较大时,避免其不会抛出OracleException异常。
2.getString()方法或getInt()方法被调用时,程序会一次性将数据都放在内存中,然后通过ResultSet的next()和getString()方法来获取数据。
6.使用JDBC需要注意的一些问题
1.首先要建立数据库的连接,才能完成对数据库的访问
2.正常关闭和释放JDBC连接,JDBC资源才可以被快速地重用,从而使得系统性能得到改善。
MySQL数据库字段 时间类型
在MySQL中经常用来存储日期的数据类型包括:Date Datetime Timestamp
1.Date数据类型
表示用来存储没有时间的日期,此类型的格式为:YYYY-MM-DD 范围是:1000-00-00到9999-12-31
2.Datetime类型
存储有日期和时间的数据,此类型的格式: YYYY-MM-DD HH:MM:SS 范围是:1000-00-00 00:00:00 - 9999-12-31 23:59:59
3.Timestamp类型
存储既有时间又有日期的数据,此类型的格式: YYYY-MM-DD HH:MM:SS 范围是:1000-00-00 00:00:00 - 9999-12-31 23:59:59
4.TIMESTAMP和DATETIME相同点
两者都可用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期
5.TIMESTAMP和DATETIME的不同点
1.两者的存储方式不一样,TIMESTAMP将客户端插入的时间从当前时区转换为UTC(世界标准时间)存储。查询的时候又转化为客户端当前时区时间进行返回。对于DATETIME两者不做任何的改变,基本都是原样的输入输出。
2.两者能够存储的时间范围不一样,timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
MySQL - 命令
1.存储引擎:ENGINE = engine_name
存储引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
2.列属性:
1.unique 唯一索引(唯一约束) 使得某字段的值不能重复
2.auto_increment 自增约束 默认为1开始自动增长。可以通过表属性 auto_increment = x进行设置,或 alter table tbl auto_increment = x;
3.foreign key 外键约束 用于限制主表与从表的数据完整性。存在外键的表称之为从表,外键指向的表称之为主表。作用:保持数据的一致性,完整性,主要目的是控制存储在外键表(从表)中的数据。
3.属性
1.group子句 group by 字段/别名 [排序方式]
group by 表示按照某种方式进行分组
排序方式:升序:ASC,降序:DESC
合计函数需要配合group by使用:
1.count 返回不同的非NULL值数目 count(*)、count(字段)
2.sum 求和
3.max 求最大值
4.min 求最小值
5.avg 求平均值
2.having子句 与where 功能 用法相同,执行时机不同
where 在开始时执行检测数据,对原数据进行过滤。having 对筛选出的结果再次进行过滤。having 字段必须是查询出来的,where 字段必须是数据表存在的。
3.order by 子句 排序子句
order by 排序字段/别名 排序方式 [,排序字段/别名 排序方式]... 升序:ASC,降序:DESC
4.limit 子句,限制结果数量子句
仅仅只对处理好的结果进行数量限制,将处理好的结果看作是一个集合,按照记录出现的顺序,索引从0开始。
limit 起始位置,获取条数 省略第一个参数,表示从索引0开始,limit获取条数。
5.distinct all 选项
distinct 表示去除重复记录,默认值为all,全部记录。
6.列子查询
如果子查询结果返回的是一列,使用 in 或者 not in 完成查询。
7.JOIN
该命令用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
select * from persons INNER JOIN Orders ON persons.id_p = Orders.id_p ORDER BY persons.LastName
扩展:1.JOIN: 如果表中有至少一个匹配,则返回行。2.INNER JOIN:该语句表示产生的结果集中是两个表的交集。3.FULL[OUTER] JOIN:表示产生两个表的并集。 2.LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行。表示产生左边表的完全集,如果右表中有匹配则有值,否则由null代替。 3.RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 4.FULL JOIN: 只要其中一个表中存在匹配,就返回行
8.mysql操作查询结果(case when then else end)
在这里case有两种格式:
1.简单case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
2.case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
注意:这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
9.mysql cast & convert函数
MySQL的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。
用法:
CAST(value as type);
CONVERT(value, type);
注意:转换的类型是有限制的,该类型可包括(BINARY,CHAR,DATE,TIME,DATETIME,DECIMAL,SIGNED,UNSIGNED)。
10.mysql using & on
在用join进行多表查询的时候,通常使用on来建立两表的关系,但还有一个更方便的关键字using
例:
select a.name,b.age from test as a
join test2 as b
on a.id=b.id
select a.name,b.age from test as a
join test2 as b
using(id)
//上面的两个程序实等价的。
11.mysql FIND_IN_SET()函数
FIND_IN_SET(str, strList):str表示要查询的字符串 strList表示查询字段中包含str结果。
select * from tt_course WHERE FIND_IN_SET('15', btype);
注意:FIND_IN_SET与like的区别:like是广泛的模糊查询,字符串中没有分隔符。FIND_IN_SET是精确匹配,字段值以英文”,”分割,FIND_IN_SET查询的结果小于like查询的结果。
提示:在mysql中使用Navicat可视化界面的时候如果遇到错误:
1045 Access denied for user 'root'@'localhost' (using password:YES)
或许是因为误删了root用户,然后在Navicat中直接添加上root用户即可。密码和你数据库密码一致。(user:root pass:xxx)。
MySQL的主从分离实现
利用mysql的主从配置实现主从分离。1.从数据库层面实现主从分离的配置。2.从程序的读写方面实现(不需要改变现有的程序)。
主从库理论
主从同步工作原理:1.主数据库将数据信息记录到二进制文件当中。2.然后从服务器就会同步主服务器的数据信息。3.然后从服务器上的线程同步执行操作。